'use strict';

// // Flags: --expose-internals
// // This verifies that
// // 1. We do not leak internal modules unless the --require-internals option
// //    is on.
// // 2. We do not accidentally leak any modules to the public global scope.
// // 3. Deprecated modules are properly deprecated.

const common = require('../common');

common.skip("This test is not going to be implemented in Bun. We do not support --expose-internals.")

// if (!common.isMainThread) {
//   common.skip('Cannot test the existence of --expose-internals from worker');
// }

// const assert = require('assert');
// const fork = require('child_process').fork;

// const expectedPublicModules = new Set([
//   '_http_agent',
//   '_http_client',
//   '_http_common',
//   '_http_incoming',
//   '_http_outgoing',
//   '_http_server',
//   '_stream_duplex',
//   '_stream_passthrough',
//   '_stream_readable',
//   '_stream_transform',
//   '_stream_wrap',
//   '_stream_writable',
//   '_tls_common',
//   '_tls_wrap',
//   'assert',
//   'async_hooks',
//   'buffer',
//   'child_process',
//   'cluster',
//   'console',
//   'constants',
//   'crypto',
//   'dgram',
//   'dns',
//   'domain',
//   'events',
//   'fs',
//   'http',
//   'http2',
//   'https',
//   'inspector',
//   'module',
//   'net',
//   'os',
//   'path',
//   'perf_hooks',
//   'process',
//   'punycode',
//   'querystring',
//   'readline',
//   'repl',
//   'stream',
//   'string_decoder',
//   'sys',
//   'timers',
//   'tls',
//   'trace_events',
//   'tty',
//   'url',
//   'util',
//   'v8',
//   'vm',
//   'worker_threads',
//   'zlib',
// ]);

// if (process.argv[2] === 'child') {
//   assert(!process.execArgv.includes('--expose-internals'));
//   process.once('message', ({ allBuiltins }) => {
//     const publicModules = new Set();
//     for (const id of allBuiltins) {
//       if (id.startsWith('internal/')) {
//         assert.throws(() => {
//           require(id);
//         }, {
//           code: 'MODULE_NOT_FOUND',
//           message: `Cannot find module '${id}'`
//         });
//       } else {
//         require(id);
//         publicModules.add(id);
//       }
//     }
//     assert(allBuiltins.length > publicModules.size);
//     // Make sure all the public modules are available through
//     // require('module').builtinModules
//     assert.deepStrictEqual(
//       publicModules,
//       new Set(require('module').builtinModules)
//     );
//     assert.deepStrictEqual(publicModules, expectedPublicModules);
//   });
// } else {
//   assert(process.execArgv.includes('--expose-internals'));
//   const child = fork(__filename, ['child'], {
//     execArgv: []
//   });
//   const { builtinModules } = require('module');
//   // When --expose-internals is on, require('module').builtinModules
//   // contains internal modules.
//   const message = { allBuiltins: builtinModules };
//   child.send(message);
// }
